package com.ciwong.epaper.modules.epaper.lsdao;

import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.ciwong.libs.utils.CWLog;
import com.ciwong.libs.utils.volley.BaseRequest;
import com.ciwong.libs.utils.volley.HttpRequest;
import com.ciwong.libs.utils.volley.MultipartRequest;
import com.ciwong.mobilelib.i.BaseCallBack;
import com.ciwong.mobilelib.utils.BaseRequestUtil;

import org.json.JSONException;
import org.json.JSONObject;

import android.text.TextUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 听说模考口头作文题评测request
 *
 * @author sugy
 * @version ciwong v.1.0 2015/11/19 9:27
 * @since ciwong v.1.0
 */
public class LSRequest {

    /**
     * 创建session
     *
     * @param json     参数json
     * @param callBack 回调
     */
//    public static void createSession(final String json,final LSCallBack callBack) {
//        StringRequest request = new StringRequest(Request.Method.POST,
//                LSAction.ACTION_LS_ENGINE, new Response.Listener<String>() {
//            @Override
//            public void onResponse(String s) {
//                dealResult(s, callBack);
//            }
//        }, new Response.ErrorListener() {
//            @Override
//            public void onErrorResponse(VolleyError volleyError) {
//                callBack.failed(volleyError);
//            }
//        }) {
//            @Override
//            protected Response<String> parseNetworkResponse(
//                    NetworkResponse response) {
//                Map<String, String> headers = response.headers;
//                if (headers != null) {
//                    callBack.onCookie(headers.get("Set-Cookie"));
//                }
//                return super.parseNetworkResponse(response);
//            }
//
//            @Override
//            public byte[] getBody() throws AuthFailureError {
//                return json.getBytes();
//            }
//        };
//        request.setRetryPolicy(new DefaultRetryPolicy(50000,
//                DEFAULT_MIN_RETRIES,
//                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
//        BaseRequestUtil.getInstance().add(request);
//    }

    public static int DEFAULT_MIN_RETRIES = 0;

    /**
     * 停止session
     *
     * @param cookie    cookie
     * @param sessionId session id
     * @param callBack  回调
     */
//    public static void stopSession(final String cookie, final String sessionId, final BaseCallBack callBack) {
//        HttpRequest request = new HttpRequest(Request.Method.PUT,
//                LSAction.ACTION_LS_ENGINE + sessionId,
//                new Response.ErrorListener() {
//
//                    @Override
//                    public void onErrorResponse(VolleyError error) {
//                        callBack.failed(error);
//                    }
//                }, new BaseRequest.ResponseCallback() {
//
//            @Override
//            public void error(int errorCode, String msg) {
//                callBack.failed(errorCode, msg);
//            }
//
//            @Override
//            public void success(String responseStr) {
//                dealResult(responseStr, callBack);
//            }
//        }) {
//            @Override
//            public byte[] getBody() throws AuthFailureError {
//                return "{\"action\": \"stop\"}".getBytes();
//            }
//
//            @Override
//            public Map<String, String> getHeaders() throws AuthFailureError {
//                Map<String, String> map = new HashMap<String, String>();
//                map.put("Cookie", cookie);
//                return map;
//            }
//        };
//        request.setRetryPolicy(new DefaultRetryPolicy(20000,
//                DEFAULT_MIN_RETRIES,
//                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
//        BaseRequestUtil.getInstance().add(request);
//    }

    /**
     * 获取评测结果
     *
     * @param cookie    cookie
     * @param sessionId session id
     * @param callBack  回调
     */
//    public static void getResult(final String cookie, final String sessionId,  final BaseCallBack callBack) {
//        HttpRequest request = new HttpRequest(Request.Method.GET,
//                LSAction.ACTION_LS_ENGINE + sessionId,
//                new Response.ErrorListener() {
//
//                    @Override
//                    public void onErrorResponse(VolleyError error) {
//                        callBack.failed(error);
//                    }
//                }, new BaseRequest.ResponseCallback() {
//
//            @Override
//            public void error(int errorCode, String msg) {
//                callBack.failed(errorCode, msg);
//            }
//
//            @Override
//            public void success(String responseStr) {
//                dealResult(responseStr, callBack);
//            }
//
//        }) {
//            @Override
//            public Map<String, String> getHeaders() throws AuthFailureError {
//                Map<String, String> map = new HashMap<String, String>();
//                map.put("Cookie", cookie);
//                return map;
//            }
//        };
//        request.setRetryPolicy(new DefaultRetryPolicy(20000,
//                DEFAULT_MIN_RETRIES,
//                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
//        BaseRequestUtil.getInstance().add(request);
//    }

    /**
     * 统一处理返回结果
     *
     * @param responseStr
     * @param callBack
     */
    private static void dealResult(String responseStr, BaseCallBack callBack) {
        if (!TextUtils.isEmpty(responseStr)) {
            try {
                JSONObject jsonObject = new JSONObject(responseStr);
                if (jsonObject.has("errno")) {
                    int errno = jsonObject.getInt("errno");
                    if (errno == 0) {
                        callBack.success(jsonObject);
                    } else {
                        callBack.failed(errno, jsonObject.has("error")
                                ? jsonObject.getString("error") : "");
                    }
                } else {
                    callBack.failed(-1, null);
                }
            } catch (JSONException e) {
                callBack.failed(-2, null);
            }
        } else {
            callBack.failed(-3, null);
        }
    }

    /**
     * 评测上传文件
     *
     * @param cookie    cookie
     * @param sessionId 会话ID
     * @param index     下标
     * @param bytes     字节数组
     * @param tag       上传标记
     * @param callBack  回调
     */
//    public static void uploadAudio(final String cookie, final String sessionId, int index, final byte[] bytes, Object tag, final BaseCallBack callBack) {
//        MultipartRequest request = new MultipartRequest(
//                LSAction.getActionLsUpload(sessionId, index), bytes,
//                new Response.ErrorListener() {
//
//                    @Override
//                    public void onErrorResponse(VolleyError error) {
//
//
//                        callBack.failed(error);
//                    }
//                }, new BaseRequest.ResponseCallback() {
//
//            @Override
//            public void error(int errorCode, String msg) {
//                callBack.failed(errorCode, msg);
//            }
//
//            @Override
//            public void success(String responseStr) {
//
//                dealResult(responseStr, callBack);
//            }
//
//        }) {
//            @Override
//            public Map<String, String> getHeaders() throws AuthFailureError {
//                Map<String, String> map = new HashMap<String, String>();
//                map.put("Content-Type", "application/octet-stream");
//                map.put("Cookie", cookie);
//                return map;
//            }
//
//        };
//        request.setRetryPolicy(new DefaultRetryPolicy(60000,
//                DEFAULT_MIN_RETRIES,
//                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
//        BaseRequestUtil.getInstance().add(request, tag);
//    }
}
